#include "../header.h"

//1.僵尸进程的产生：父进程创建子进程，父进程负责回收子进程，
//子进程运行结束以后，如果父进程由于太忙没时间回收子进程，子进程就成为一个僵尸进程。
//2.危害：内存泄漏。其他应用程序可用的内存变小。
//3.避免方法：wait函数：在父进程忙之前，等待子进程先结束，然后回收，然后就没有僵尸进程了。

int main(int argc, char const *argv[])
{
    pid_t pid = fork();
    if(pid < 0 )
    {
        perror("fork error\n");
        return -1;
    }
    //! 双任务  是一个结构，具体要操作文件还是要在结构当中 读写 调用文件函数
    if(pid > 0)
    {
        printf("this is parents procecss test start :%d\n",getpid());
        //1.不接受状态的。
        //wait(NULL);
        //2.接收子进程退出状态的。
        int status = 0 ; 
        wait(&status);
        printf("子进程退出状态是:%d\n",WEXITSTATUS(status));
        int num = 20;
        while(num--)
        {
            printf("this is parents process read or write to file\n");
            sleep(1);
        }
        printf("this is parents process test end:%d\n",getpid());
        //父进程后结束，没有孤儿进程。
        sleep(1);
    }
    if(pid == 0 )
    {
        printf("this is child procecss test start :%d\n",getpid());
        int num = 5;
        while(num--)
        {
            printf("this is child process read or write to file\n");
            sleep(1);
            
        }
        printf("this is child process test end:%d\n",getpid());
        exit(2);
    }
    return 0;
}
